使用 Python 和 FFmpeg 将视频转换为 GIF(带显卡加速选项)

781Views
No Comments

共计 3516 个字符,预计需要花费 9 分钟才能阅读完成。

本文将使用 Python 和 FFmpeg 将视频转换为 GIF 动画,并提供一个图形用户界面(GUI)供用户选择视频文件、调整输出 GIF 的大小,并选择是否使用显卡加速。

使用 Python 和 FFmpeg 将视频转换为 GIF(带显卡加速选项)

准备工作

1. 安装必要的 Python 库

首先,确保你已经安装了必要的 Python 库。可以通过以下命令安装 tkintersubprocess(通常已经内置在标准库中,无需额外安装)。

pip install moviepy

2. 下载并配置 FFmpeg

  • 访问 FFmpeg 官网 并选择“Windows”链接。
  • 下载 ffmpeg-n6.1-latest-win64-gpl-6.1.zip 文件。
  • 解压该 ZIP 文件,并将 ffmpeg.exe 文件放在与你的 Python 脚本相同的目录中。

项目结构

确保你的项目目录包含以下文件:

your_project/
    ├── ffmpeg.exe
    ├── video_to_gif_app.py

Python 代码:video_to_gif_app.py

以下是完整的 Python 代码,用于创建一个 GUI 应用程序,将视频转换为 GIF,并支持显卡加速和调整 GIF 大小:

import tkinter as tk
from tkinter import filedialog, messagebox
import threading
import os
import subprocess

class VideoToGifApp:
    def __init__(self, root):
        self.root = root
        self.root.title("视频转GIF应用")

        # 设置窗口大小
        self.root.geometry("400x300")

        # 添加标签
        self.label = tk.Label(root, text="选择视频文件以转换为GIF", padx=10, pady=10)
        self.label.pack()

        # 添加选择文件按钮
        self.select_button = tk.Button(root, text="选择文件", command=self.select_file, padx=10, pady=5)
        self.select_button.pack()

        # 添加转换按钮
        self.convert_button = tk.Button(root, text="转换为GIF", command=self.start_conversion_thread, state=tk.DISABLED, padx=10, pady=5)
        self.convert_button.pack()

        # 添加滑块
        self.scale_label = tk.Label(root, text="GIF 大小百分比:", padx=10, pady=5)
        self.scale_label.pack()

        self.scale = tk.Scale(root, from_=10, to=200, orient=tk.HORIZONTAL)
        self.scale.set(100)
        self.scale.pack()

        # 添加显卡加速复选框
        self.use_gpu = tk.BooleanVar()
        self.gpu_checkbox = tk.Checkbutton(root, text="使用显卡加速", variable=self.use_gpu)
        self.gpu_checkbox.pack()

        # 添加进度条标签
        self.progress_label = tk.Label(root, text="", padx=10, pady=10)
        self.progress_label.pack()

        # 添加退出按钮
        self.exit_button = tk.Button(root, text="退出", command=root.quit, padx=10, pady=5)
        self.exit_button.pack()

    def select_file(self):
        self.file_path = filedialog.askopenfilename(filetypes=[("Video Files", "*.mp4 *.avi *.mov *.mkv")])
        if self.file_path:
            self.label.config(text=f"已选择文件: {self.file_path}")
            self.convert_button.config(state=tk.NORMAL)

    def start_conversion_thread(self):
        self.progress_label.config(text="正在转换中,请稍候...")
        self.convert_button.config(state=tk.DISABLED)
        threading.Thread(target=self.convert_to_gif).start()

    def convert_to_gif(self):
        try:
            # 生成GIF文件路径
            gif_path = os.path.splitext(self.file_path)[0] + ".gif"

            # 获取ffmpeg.exe的路径
            ffmpeg_path = os.path.join(os.path.dirname(__file__), 'ffmpeg.exe')

            # 获取用户选择的百分比
            scale_percentage = self.scale.get()

            # 构建尺寸参数
            size = f"scale=iw*{scale_percentage}/100:ih*{scale_percentage}/100"

            # 基本的ffmpeg命令
            cmd = [ffmpeg_path, "-i", self.file_path, "-vf", f"fps=10,{size}:flags=lanczos", "-gifflags", "+transdiff", "-y", gif_path]

            # 如果用户选择使用显卡加速
            if self.use_gpu.get():
                cmd = [ffmpeg_path, "-hwaccel", "cuda", "-i", self.file_path, "-vf", f"fps=10,{size}:flags=lanczos", "-gifflags", "+transdiff", "-y", gif_path]

            # 执行ffmpeg命令
            result = subprocess.run(cmd, capture_output=True, text=True)

            if result.returncode != 0:
                raise Exception(f"ffmpeg错误: {result.stderr}")

            self.progress_label.config(text=f"转换完成!GIF已保存至: {gif_path}")
        except Exception as e:
            self.progress_label.config(text=f"转换失败: {e}")
        finally:
            self.convert_button.config(state=tk.NORMAL)

def main():
    root = tk.Tk()
    app = VideoToGifApp(root)
    root.mainloop()

if __name__ == "__main__":
    main()

使用说明

  1. 下载并解压 FFmpeg:从 FFmpeg 官网下载 ffmpeg-n6.1-latest-win64-gpl-6.1.zip 文件,解压后将 ffmpeg.exe 文件放在与你的 Python 脚本相同的目录中。

  2. 安装必要的 Python 库:确保你已安装 moviepy,可以通过以下命令进行安装:

    pip install moviepy
  3. 运行应用:在命令提示符或终端中,导航到脚本所在的目录并运行:

    python video_to_gif_app.py
  4. 选择视频文件:点击“选择文件”按钮,选择要转换的视频文件。

  5. 调整 GIF 大小:使用滑块选择 GIF 大小的百分比(例如,50%)。

  6. 显卡加速:如果需要使用显卡加速,勾选“使用显卡加速”复选框。

  7. 转换为 GIF:选择文件后,点击“转换为 GIF”按钮,程序将启动一个新线程进行转换,并在界面上显示转换进度。

  8. 转换完成:转换完成后,界面上会显示转换完成的消息和 GIF 文件的保存路径。

  9. 退出:点击“退出”按钮关闭应用程序。

通过这些步骤,你将能够使用 Python 和 FFmpeg 将视频转换为 GIF,并支持显卡加速和调整 GIF 大小。

 文件名称:003.视频转换为 GIF(带显卡加速选项).zip
 文件大小:12MB
 下载声明:本站部分资源来自于网络收集,若侵犯了你的隐私或版权,请及时联系我们删除有关信息。
下载地址:90le.cn/wp-content/uploads/2024/05/003.视频转换为-GIF(带显卡加速选项).zip

正文完
 0
binbin
Copyright notice: Our original article, by binbin 2024-05-25 publish, total 3516 words.
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
Comment(No Comments)